
struct VertexInput {
    @location(0) position: vec3<f32>,
    @location(1) color: vec3<f32>,
    @location(2) tex_coords: vec2<f32>,
}

struct VertexOutput {
    @builtin(position) pos: vec4<f32>,
    @location(0) uv: vec2<f32>,
}

// @vertex
// fn vs_main(@builtin(vertex_index) vid: u32) -> VertexOutput {
//     var output: VertexOutput;
//     // 生成裁剪空间坐标
//     output.pos = vec4(
//         f32((vid & 1u) << 1u) - 1.0, 
//         f32((vid & 2u) << 1u) - 1.0, 
//         0.0, 1.0
//     );
//     // 生成纹理坐标（0～1范围）
//     output.uv = vec2(
//         f32((vid & 1u)), 
//         f32((vid & 2u) >> 1u)
//     );
//     return output;
// }

@vertex
fn vs_main(model: VertexInput) -> VertexOutput {
    var output: VertexOutput;
    // 生成裁剪空间坐标
    output.pos = vec4(
        model.position.x, 
        model.position.y, 
        0.0, 1.0
    );
    // 生成纹理坐标（0～1范围）
    output.uv = vec2(
        model.tex_coords.x, 
        model.tex_coords.y
    );
    return output;
}

@group(0) @binding(0) var tex: texture_2d<f32>;
@group(0) @binding(1) var sam: sampler;

@fragment
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
    return textureSample(tex, sam, in.uv);
    // return vec4(1.0, 0.0, 0.0, 1.0);
}